package vista;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListModel;

import javax.swing.border.BevelBorder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import util.Utilidades;





import modelo.Cliente;
import modelo.DetalleSolicitud;
import modelo.Equipo;
import modelo.Material;
import modelo.MaterialServicio;
import modelo.Servicio;
import modelo.Solicitud;
import modelo.Status;
import modelo.Sucursal;
import modelo.Tarea;
import modelo.TareaServicio;
import modelo.dao.Servidor;



/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class DlgSolicitud extends javax.swing.JDialog {

	{
		//Set Look & Feel
		try {
			javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	private class DetalleEquipo {
		public DetalleEquipo(String det,Equipo equip) {
			detalle = det;
			equipo = equip;
		}
		
		String detalle;
		Equipo equipo;
	}

	private JLabel lblSucursal;
	private JTextField txtSucursal;
	private JTextField txtCliente;
	private JScrollPane jScrollPane1;
	private JScrollPane jScrollPane2;
	private JTextArea txtaEspecificacion;
	private JButton btBuscarSuc;
	private JButton btBuscarCli;
	private JLabel lblCliente;
	private JLabel lblCodigoSolicitud;
	private JTextField txtCodigo;

	private JButton btIncluir;
	private JButton btQuitar;
	private JButton btSalir;
	private JButton btAgregar;
	private JTable tbDetalles;
	private JLabel jDetalles;
	private JPanel jPanel1;
	private JLabel lblEspecificacion;
	private Cliente cliente=null;
	private Sucursal sucursal=null;
	private JButton btAgregarEquipo;
	private ArrayList<DetalleEquipo> detalles_equip= new ArrayList<DetalleEquipo>();
	private AbstractTableModel tbModelDetalles=null;
	//private ArrayList<DetalleSolicitud> detalles_ser= new ArrayList<MaterialServicio>();
    private Equipo equipo=null;
	
	
	public DlgSolicitud() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			{
				getContentPane().setLayout(null);
				this.setTitle("Solicitud");
				{
					txtCliente = new JTextField();
					getContentPane().add(txtCliente);
					txtCliente.setBounds(265, 18, 194, 28);
					txtCliente.setEnabled(false);
				}
				
				{
					txtSucursal = new JTextField();
					getContentPane().add(txtSucursal);
					txtSucursal.setBounds(101, 59, 358, 28);
					txtSucursal.setEnabled(false);
				}
				{
					lblSucursal = new JLabel();
					getContentPane().add(lblSucursal);
					lblSucursal.setText("Sucursal:");
					lblSucursal.setFont(new java.awt.Font("Tahoma",1,11));
					lblSucursal.setBounds(29, 66, 66, 14);
				}
				{
					lblEspecificacion = new JLabel();
					getContentPane().add(lblEspecificacion);
					lblEspecificacion.setText("Especificacion de la Solicitud:");
					lblEspecificacion.setFont(new java.awt.Font("Tahoma",1,11));
					lblEspecificacion.setBounds(29, 108, 207, 14);
				}
				{
					jPanel1 = new JPanel();
					getContentPane().add(jPanel1);
					jPanel1.setBounds(29, 254, 480, 193);
					jPanel1.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
					jPanel1.setLayout(null);
					{
						jScrollPane1 = new JScrollPane();
						jPanel1.add(jScrollPane1);
						jScrollPane1.setBounds(14, 14, 444, 116);
						{
							tbModelDetalles = new AbstractTableModel() {
								@Override
								public Object getValueAt(int fil, int col) {
									DetalleEquipo obj = detalles_equip.get(fil); 
									switch (col) {
									case 0: return obj.detalle;
									case 1: return obj.equipo.getDescripcion();
									}
									
									return null;
								}
								
								@Override
								public void setValueAt(Object value,int fil, int col) {
									DetalleEquipo obj = detalles_equip.get(fil);
									
									try {
											String det =(value.toString()).toUpperCase();
										    obj.detalle=det;
										   // if(!det.equalsIgnoreCase(""))
										    	
										  ///  else	
										    //	JOptionPane.showMessageDialog(dsol, "Escriba un detalle","Invalido",JOptionPane.ERROR_MESSAGE);	
										   

										} catch (NumberFormatException ex) {
										JOptionPane.showMessageDialog(dsol, "Valor Invalido","Invalido",JOptionPane.ERROR_MESSAGE);
									 }
								}
								
								@Override
								public int getRowCount() {
									return detalles_equip.size();
								}
								
								@Override
								public String getColumnName(int col) {
									switch (col) {
									case 0: return "Detalle";	
									case 1: return "Equipo";
									}
									
									return null;
								}
								@Override
								public int getColumnCount() {
									return 2;
								}
								@Override
								public boolean isCellEditable(int fil, int col) {
									return col == 0;
								}
							};
							tbDetalles = new JTable();
							jScrollPane1.setViewportView(tbDetalles);
							tbDetalles.setModel(tbModelDetalles);
							tbDetalles.setBounds(111, 34, 150, 32);
						}
					}
					{
						btQuitar = new JButton();
						jPanel1.add(btQuitar);
						btQuitar.setText("Quitar");
						btQuitar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Quitar.png")));
						btQuitar.setBounds(349, 142, 94, 27);
					}
					{
						btAgregar = new JButton();
						jPanel1.add(btAgregar);
						btAgregar.setText("Agregar");
						btAgregar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Agregar.png")));
						btAgregar.setBounds(26, 142, 103, 27);
					}
					{
						btAgregarEquipo = new JButton();
						jPanel1.add(btAgregarEquipo);
						btAgregarEquipo.setText("Agregar Equipo");
						btAgregarEquipo.setBounds(171, 141, 129, 28);
					}
				}
				{
					jDetalles = new JLabel();
					getContentPane().add(jDetalles);
					jDetalles.setText("Detalles de la Solicitud:");
					jDetalles.setFont(new java.awt.Font("Tahoma",1,11));
					jDetalles.setBounds(29, 228, 155, 14);
				}
				{
					btSalir = new JButton();
					getContentPane().add(btSalir);
					btSalir.setText("Salir");
					btSalir.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Salir.gif")));
					btSalir.setHorizontalTextPosition(JButton.CENTER);
					btSalir.setVerticalTextPosition(JButton.BOTTOM);
					btSalir.setBounds(459, 478, 79, 40);
				}
				{
					btIncluir = new JButton();
					getContentPane().add(btIncluir);
					btIncluir.setText("Incluir");
					btIncluir.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/incluir.PNG")));
					btIncluir.setHorizontalTextPosition(JButton.CENTER);
					btIncluir.setVerticalTextPosition(JButton.BOTTOM);
					btIncluir.setBounds(354, 478, 79, 40);
				}
				{
					txtCodigo = new JTextField();
					getContentPane().add(txtCodigo);
					txtCodigo.setBounds(101, 15, 90, 28);
					txtCodigo.setEnabled(false);
				}
				{
					lblCodigoSolicitud = new JLabel();
					getContentPane().add(lblCodigoSolicitud);
					lblCodigoSolicitud.setText("Numero:");
					lblCodigoSolicitud.setFont(new java.awt.Font("Tahoma",1,11));
					lblCodigoSolicitud.setBounds(29, 22, 62, 14);
				}
				{
					lblCliente = new JLabel();
					getContentPane().add(lblCliente);
					lblCliente.setText("Cliente:");
					lblCliente.setFont(new java.awt.Font("Tahoma",1,11));
					lblCliente.setBounds(203, 22, 56, 14);
				}
				{
					btBuscarCli = new JButton();
					getContentPane().add(btBuscarCli);
					btBuscarCli.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/buscar.PNG")));
					btBuscarCli.setBounds(476, 21, 41, 27);
				}
				{
					btBuscarSuc = new JButton();
					getContentPane().add(btBuscarSuc);
					btBuscarSuc.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/buscar.PNG")));
					btBuscarSuc.setBounds(476, 59, 41, 27);
				}
				{
					jScrollPane2 = new JScrollPane();
					getContentPane().add(jScrollPane2);
					jScrollPane2.setBounds(62, 134, 401, 69);
					{
						txtaEspecificacion = new JTextArea();
						jScrollPane2.setViewportView(txtaEspecificacion);
						txtaEspecificacion.setBounds(56, 134, 413, 74);
					}
				}
			}
			this.setSize(570, 589);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	

	DlgSolicitud dsol=this;
	public void mostrar(JFrame frame) {
		
		setLocationRelativeTo(null);
		darFormatos();

		final int codigo = Servidor.solicitudes().nuevoCodigoSolicitud();
		txtCodigo.setText(String.format("%04d", codigo));
		
		btBuscarCli.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				txtSucursal.setText("");
				DlgSeleccionarCliente dscli  = new DlgSeleccionarCliente(dsol);
				cliente=dscli.mostrar(dsol);
				if(cliente!=null)
				txtCliente.setText(cliente.getCodigo());
			}
		});
		
		btBuscarSuc.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(txtCliente.getText().equalsIgnoreCase(""))
					JOptionPane.showMessageDialog(dsol, "Debe agregar un cliente a la solicitud", "Omision de Datos",JOptionPane.ERROR_MESSAGE);
				else{
					DlgSeleccionarSucursal dssuc  = new DlgSeleccionarSucursal(dsol,cliente);
					sucursal=dssuc.mostrar(dsol);
					if(sucursal!=null)
					txtSucursal.setText(sucursal.getDescripcion());
				}
			}
		});
		
		btAgregar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				int i=tbDetalles.getRowCount();
				if(i>0)
					if(detalles_equip.get(i-1).detalle.equalsIgnoreCase(""))
						JOptionPane.showMessageDialog(dsol, "Debe escribir el detalle", "Omision de Datos",JOptionPane.ERROR_MESSAGE);
					else{
						equipo=new Equipo(1,"NO ASIGNADO","",null,null,Status.ACTIVO);
						DetalleEquipo det_equi=new DetalleEquipo("",equipo);
						detalles_equip.add(det_equi);
						tbModelDetalles.fireTableDataChanged();
					}
				else{
					equipo=new Equipo(1,"NO ASIGNADO","",null,null,Status.ACTIVO);
					DetalleEquipo det_equi=new DetalleEquipo("",equipo);
					detalles_equip.add(det_equi);
					tbModelDetalles.fireTableDataChanged();
				}
					
			}
		});
		
		btAgregarEquipo.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(txtSucursal.getText().equalsIgnoreCase(""))
					JOptionPane.showMessageDialog(dsol, "Debe agregar una sucursal a la solicitud", "Omision de Datos",JOptionPane.ERROR_MESSAGE);
				else{
					if(Utilidades.seleccion(tbDetalles, dsol, "Detalle")){
						int i=dsol.tbDetalles.getSelectedRow();
						DlgSeleccionarEquipo dsequ  = new DlgSeleccionarEquipo(dsol,sucursal);
						equipo=dsequ.mostrar(dsol);
						String det=detalles_equip.get(i).detalle;
						DetalleEquipo det_equi=new DetalleEquipo(det,equipo);
						if(equipo!=null){
							detalles_equip.set(i,det_equi);
							tbModelDetalles.fireTableDataChanged();
						}
					}
					
				}
			  
			}
		});
		
		btQuitar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(Utilidades.seleccion(tbDetalles, dsol, "Detalle"))
				{  int i=dsol.tbDetalles.getSelectedRow();
			       detalles_equip.remove(i);
			       tbModelDetalles.fireTableRowsDeleted(i, i);
			    }
			}
		});
		
		btIncluir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(!(Utilidades.campoVacio(dsol, txtCliente, "Cliente") || Utilidades.campoVacio(dsol, txtSucursal, "Sucursal")
						|| Utilidades.campoVacio(dsol, txtaEspecificacion, "Especificacion")))
				{ 
					if(tbDetalles.getRowCount()==0)
						JOptionPane.showMessageDialog(dsol, "Debe Agregar Detalles", "Omision de Datos",JOptionPane.ERROR_MESSAGE);
					else
					{ 
					  boolean b=false;
					  for(int i=0;i<detalles_equip.size();i++)
						if(detalles_equip.get(i).detalle.equalsIgnoreCase(""))
							b=true;
					  if(b==true)
						  JOptionPane.showMessageDialog(dsol, "Hay detalles sin especificar", "Omision de Datos",JOptionPane.ERROR_MESSAGE);
					  else
					  {
						  Solicitud sol=Servidor.solicitudes().agregarSolicitud(codigo, txtaEspecificacion.getText(), sucursal, Status.ACTIVO);
						  if(sol!=null)
						  {	  	b=true;
								for (int i = 0; i < detalles_equip.size(); ++i)
								{  Equipo equip=detalles_equip.get(i).equipo;
								   DetalleSolicitud det_sol=null;
								   if(equip!=null)
									det_sol=Servidor.solicitudes().agregarDetalleSolicitud(detalles_equip.get(i).detalle, sol, equip, Status.ACTIVO);
								   else
									 det_sol=Servidor.solicitudes().agregarDetalleSolicitudSinEquipo(detalles_equip.get(i).detalle, sol, Status.ACTIVO);  
									if(det_sol==null)
										b=false;
								}
						  }
						  if(b)
							{
								JOptionPane.showMessageDialog(dsol, "Registro incluido exitosamente","Inclusion",JOptionPane.INFORMATION_MESSAGE);
								dsol.dispose();
							}
							else
								JOptionPane.showMessageDialog(dsol, "EL registro no pudo ser incluido","Inclusion",JOptionPane.ERROR_MESSAGE);
					  }
					}
					 
					
				}
			}
		});
		
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dsol.dispose();
			}
		});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}
	public void mostrarVer(JDialog dialog,Solicitud solicitud) {
		
		setLocationRelativeTo(null);
		
		btIncluir.setVisible(false);
		btBuscarCli.setVisible(false);
		btBuscarSuc.setVisible(false);
		
		llenarDatos(solicitud);
		deshabilitar();
        
				
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dsol.dispose();
			}
		});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
		
	
		
	}
	
	public void darFormatos(){ 
		
		Utilidades.convertirMayuscula(txtaEspecificacion);
		
		
	}
	//String.format("%04d", Integer.toString(obj.getCodigo()));Integer.toString(
	public void llenarDatos(Solicitud obj){
		txtCodigo.setText(String.format("%04d", obj.getCodigo()));
		txtaEspecificacion.setText(obj.getDescripcion());
		txtCliente.setText(obj.getSucursal().getCliente().getNombre());
		txtSucursal.setText(obj.getSucursal().getDescripcion());
		ArrayList<DetalleSolicitud> detalles_sol= new ArrayList<DetalleSolicitud>();
		detalles_sol = Servidor.solicitudes().consultarDetallePorSolicitudYStatus(obj.getCodigo(), Status.ACTIVO);
		for (int i = 0; i < detalles_sol.size(); ++i)
			{   DetalleEquipo dequi=new DetalleEquipo(detalles_sol.get(i).getDescripcion(),detalles_sol.get(i).getEquipo());
			   if(dequi !=null)
					detalles_equip.add(dequi);
			}
	}
	
	public void deshabilitar(){
		btAgregar.setEnabled(false);
		btAgregarEquipo.setEnabled(false);
		btQuitar.setEnabled(false);
		txtaEspecificacion.setEnabled(false);
		tbDetalles.setEnabled(false);
		
	}
	

}
